package com.lap.watchdog.starter.annotation;

import com.lap.framework.enums.SystemCode;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 *
 *
 * <pre>
 * 防重提交:
 * 当value 都没有赋值的时候,使用方法入参的md5作为重复凭证。
 * 当value 有赋值的时候,使用 value 值的md5作为重复凭证。
 *
 * 解决场景:
 * 可以解决同一个时间,某个方法参数一模一样的提交。
 * 当业务数据某个字段没有作为数据库唯一限制的时候,在业务代码中查询来作为唯一值判断，就可以解决。
 * </pre>
 *
 * @author Shuisheng Lao(劳水生)
 * @version 0.0.1
 */
@Documented
@Retention(RUNTIME)
@Target(METHOD)
public @interface RepeatSubmit {
  /**
   *
   *
   * <ol>
   *   <li>不配置，全部参数处理
   *   <li>支持EL表达式，例如: #req.name_#req.person.name
   *   <li>支持常量，例如：123，abc，
   * </ol>
   *
   * @return 键
   */
  String value() default "";

  /**
   * 间隔时间,单位毫秒,默认5秒
   *
   * @return 间隔时间
   */
  long period() default 5000L;

  /**
   * 错误提示: error.430=提交中,请勿重复提交
   *
   * @return 错误码
   */
  SystemCode errorCode() default SystemCode.REQUEST_REPEAT;
}
